/*
 * tp boole
 */
package boole.utils.provider;

import boole.circuit.Composite;
import boole.circuit._Composant;

/**
 * @author Thomas Nds nds.thomas@gmail.com
 * @author Rémi PIOTAIX <remi.piotaix@gmail.com>
 */
public interface ComposantProviderInterface {

 /**
 * Interoge si un composant de ce nom existe
 * @param nom le nom a tester
 * @return nom € composants du circuit
 */
    public boolean contains(String nom);

 /**
 * Interoge si le composant en paramètre apartient au circuit
 * @param composantClass le composant a tester
 * @return composantClass € composants
 */
    public boolean contains(Class<? extends _Composant> composantClass);

 /**
 * enregistre un composant dans le circuit.
 * @param classe le composant à ajouter
 */
    public void registerComposant(String nom, Class<? extends _Composant> classe);

    //public void registerComposite(String nom, Composite composite);

    
 /**
 * Ajoute un nouveau composant au circuit
 * @param nom le nom du composant
 * @param nombreEntrees 
 * @param nombreSorties
 * @ensure composants.containsKey(nom)==true
 */
    public _Composant newInstance(String nom, int nombreEntrees, int nombreSorties);
}
